package com.itheima.wisdomnext.mapper;

import com.itheima.wisdomnext.entity.Message;
import com.itheima.wisdomnext.entity.ReportReplyTemplate;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 消息数据库操作映射接口
 */
@Mapper
public interface MessageMapper {

    /**
     * 获取用户的所有聊天记录（包括自己发送的和接收的）
     * @param userId 用户ID
     * @return 消息列表
     */
    @Select("SELECT * FROM messages WHERE user_id = #{userId} OR admin_id = #{userId} OR recipient_id = #{userId}")
    List<Message> findMessagesByUserId(@Param("userId") Integer userId);

    /**
     * 获取管理员的所有聊天记录（包括发给所有管理员的消息）
     * @param adminId 管理员ID
     * @return 消息列表
     */
    @Select("SELECT * FROM messages " +
            "WHERE admin_id = #{adminId} " +
            "   OR recipient_id = #{adminId} " +
            "   OR (admin_id IS NULL AND recipient_id IS NULL AND user_id IS NOT NULL)")
    List<Message> findMessagesByAdminId(@Param("adminId") Integer adminId);

    /**
     * 插入新消息记录
     * @param message 消息对象
     */
    @Insert("INSERT INTO messages (user_id, admin_id, recipient_id, message_type, message_text, image_url) " +
            "VALUES (#{userId}, #{adminId}, #{recipientId}, #{messageType}, #{messageText}, #{imageUrl})")
    void insertMessage(Message message);

    /**
     * 标记消息为已读
     * @param messageId 消息ID
     */
    @Update("UPDATE messages SET is_read = true WHERE id = #{messageId}")
    void markAsRead(@Param("messageId") Integer messageId);

    /**
     * 获取所有举报回复消息模板
     * @return 模板列表
     */
    @Select("SELECT id, template_name, template_content, created_at FROM report_reply_templates")
    List<ReportReplyTemplate> getAllReportReplyTemplates();
}
